Thread Model of Unreal Engine

0x1 数据组织

Unreal Engine的数据组织是典型的Scene Graph数据结构。

Scene拥有Component。

Component是各种渲染节点的抽象。

Render通过访问Scene拥有的Component来完成各种渲染操作。

0x2 线程模型

Unreal Engine代码中封装了典型的Thread/Looper机制来支持多线程。

多线程之间的通信采用Post Task的方式来进行,避免了加锁操作。

下图说明了Unreal Engine三个线程之间的交互。

Unreal Engine的三个线程分别是GameThread, RenderThread, RHIThread。

GameThread可以理解为Controller线程,完成整个渲染流程的控制。

RenderThread是典型的渲染流程,从Scene中读入数据,完成各种效果的处理,然后调用RHIThread完成绘制。

RHIThread是具体调用图形API(OpenGL, DirectX, Vulkan, Metal)来完成绘制的线程。

下图说明了Unreal Engine绘制的简要流程。

下图说明了Unreal Engine渲染模块的层次调用关系。

Slate是Unreal Engine中包括的UI渲染框架。

Renderer里面包括两种渲染器。

然后是RenderCore模块。包括各种渲染效果的处理。

最底层是具体调用图形API的调用。